// #include <iostream>
// #include <string>
// #include <pthread.h>
// #include <unistd.h>

// void *thread_func(void *args)
// {
//     std::string str = (char *)args;
//     while (1)
//     {
//         std::cout << "线程：" << str << std::endl;
//         sleep(1);
//     }
//     return nullptr;
// }
// int main()
// {

//     pthread_t tid;
//     pthread_create(&tid, nullptr, thread_func, (void *)"thread-1");

//     while (1)
//     {
//         std::cout << "主线程：》》》" << std::endl;
//         sleep(1);
//     }
//     return 0;
// }

#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <cstdio>
#include <string>
#include <cstdlib>

int flag = 10;
void showid(pthread_t tid)
{
    printf("线程ID：0x%ld\n", tid);
}

std::string formatid(const pthread_t tid)
{
    char buf[32];
    snprintf(buf, sizeof(buf), "0x%ld", tid);
    return buf;
}
void *thread_func(void *args)
{
    std::string str = (char *)args;
    pthread_t tid = pthread_self();
    int cnt = 5;
    while (cnt--)
    {
        std::cout << "我是新线程：" << str << "线程ID：" << formatid(tid) << std::endl;
        sleep(1);
        flag++;
    }
    return (void *)123;
}
int main()
{
    pthread_t tid;
    int n = pthread_create(&tid, nullptr, thread_func, (void *)"thread-1");
    (void)n;
    showid(tid);
    // int ret;

    // pthread_t tid = pthread_self();
    int cnt = 5;
    while (cnt--)
    {
        std::cout << "我是main线程：" << formatid(pthread_self()) << " " << flag << std::endl;
        sleep(1);
    }
    void *ret = nullptr;
    pthread_join(tid, &ret);
    std::cout << "线程退出，返回值：" << ret << std::endl;
    return 0;
}